#include "ball.h"
#include "ui_batminton.h"
#include <cmath>
Ball::Ball()
{
}

void Ball::setGeometry(int x, int y){
    px=x; py=y;
}

int &Ball::x(){return px;}
int &Ball::y(){return py;}

void Ball::shoot(int x, int y,double d){
    move=true;
    vx=-18.0*((x+30)-(px+8))/d;
    vy=30.0*((py+8)-(y+30))/d;
    if (vy>0) vy=std::min(-vy,vy-40);
}

bool Ball::checkLand(){return py>854;}
int Ball::landArea(){
    return px<800;
}//检查在左方还是右方
void Ball::Reflect(){
    if (px<=0 || px>=1600) vx=-vx;
}//水平方向超出界面后，速度反向

void Ball::Move(){
    if (move){
        if (py<844) {if (vy>0) vy+=0.4; else vy+=0.6;}
        if (vy>30) vy=30;
        if (vy<-30) vy=-30;
    }
}
bool Ball::checkMove(){return move;}
void Ball::Stop(){
    vx=vy=0; move=false;
}

void Ball::update(){
    if ((px<=800 && px+vx>=800 && vx>0 && py>=540-16)||(px>800 && vx<0 && px+vx<=804 && py>=540-16)){

         if (px<800 || (px==800 && vx>=0)) px=800-16;
         else px=800+1;
         vx=-vx; vx/=2;
     }//撞网
    px+=vx;
    py+=vy;
    if (vx>0) {if (vx>0.3) vx-=0.1; else vx-=0.07; if (vx<0) vx=0;}
    if (vx<0) {if (vx<-0.3) vx+=0.1; else vx+=0.07; if (vx>0) vx=0;}
}
